package com.mms.service.impl;


import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.mms.dao.IUserInfoDao;
import com.mms.enumerate.RoleEnum;
import com.mms.pojo.UserInfo;
import com.mms.service.IUserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author 陈林鹏
 * @since 2021-04-14
 */
@Service
public class UserInfoServiceImpl extends ServiceImpl<IUserInfoDao, UserInfo> implements IUserInfoService {
    //用户信息表 Dao
    @Autowired
    IUserInfoDao userInfoDao;

    /**
     * 创建用户信息
     *
     * @param userInfo
     * @return
     */
    public UserInfo createUser(UserInfo userInfo) {
        userInfo.setCreateUsername("系统");

        //将用户信息插入到数据库中
        Integer result = userInfoDao.insert(userInfo);
        if (result < 1) {
            return null;
        }
        if (userInfoDao.existsUserRoleUserId(userInfo.getId())) {
            userInfoDao.deleteUserRole(userInfo.getId());
        }
        //设置默认角色
        userInfoDao.createUserRole(userInfo.getId(),
                RoleEnum.DEFAULT.getId());
        //通过用户的信息给
        userInfo = userInfoDao.selectById(userInfo.getId());
        return userInfo;
    }

    /**
     * 根据用户名和密码 获取 用户信息 如果 不存在 返回null
     *
     * @param userName
     * @param passWord
     * @return
     */
    public UserInfo verifyUser(String userName, String passWord) {
        //创建 userinfo 对象
        UserInfo userInfo = new UserInfo();
        //设置userinfo 对象用户名 和 密码
        userInfo.setUsername(userName);
        userInfo.setPassword(passWord);
        //通过用户名和密码 获取用户信息
        try {
            return userInfoDao.selectOne(userInfo);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 验证用户名是否存在
     * 存在 返回 true
     * 不存在 返回 false
     *
     * @param userName
     * @return
     */
    public boolean verifyUserName(String userName) {
        //获取用户名是否存在 并返回
        return userInfoDao.UserNameExists(userName);
    }


    /**
     * 批量删除
     *
     * @param userIds
     * @return
     */
    @Transactional(isolation = Isolation.READ_COMMITTED
            , propagation = Propagation.REQUIRED
            , rollbackFor = Exception.class)
    public boolean deleteBatchById(Integer[] userIds) {
        //删除用户
        for (Integer userId : userIds) {
            //删除 用户角色表
            userInfoDao.deleteUserRole(userId);
            //删除用户
            deleteById(userId);
        }
        return true;
    }

    /**
     * 创建用户
     *
     * @param userInfo
     * @param roleInfoId
     * @return
     */
    @Transactional(isolation = Isolation.READ_COMMITTED
            , propagation = Propagation.REQUIRED
            , rollbackFor = Exception.class)
    public boolean createUser(UserInfo userInfo, Integer roleInfoId) throws Exception {
        //插入用户数据
        insert(userInfo);
        //创建用户个角色数据
        if (!userInfoDao.createUserRole(userInfo.getId(), roleInfoId)) {
            throw new Exception("创建userRole异常");
        }
        return true;
    }
}
